热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

物体|尺度_对于ssd对小目标检测效果的思考

对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm



对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm_mbox_priorbox为例:

prior_box_param
min_size: 30.0
max_size: 60.0
aspect_ratio: 2
flip: true
clip: false
variance: 0.1
variance: 0.1
variance: 0.2
variance: 0.2
step: 8
offset: 0.5

其中min_size比较明确为30pixel,若以IOU 0.5为例,则原物体大小至少为21.21pixel,才能与原物体有0.5以上的IOU。也因此小于21pixel的物体,ssd无法检测。因为没有办法生成anchor。针对这个问题其实可以通过min_size与step的方式进行解决。

但仅生成anchor还不够,若要检测小物体,既需要一张足够大的featuremap来提供更加精细的特征和做更加密集的采样,同时也需要足够的semantic meaning来与背景区分开。当前conv4_3_norm_mbox_priorbox一方面featuremap不够大,特征信息不够,另一方面conv4_3_norm_mbox_priorbox属于比较靠近输入的卷积层,semantic信息同时不够。以上两方面的原因都造成了conv4_3_norm_mbox_priorbox无法用于检测小目标。

但对于conv9_2_mbox_priorbox层:

prior_box_param
min_size: 264.0
max_size: 315.0
aspect_ratio: 2
flip: true
clip: false
variance: 0.1
variance: 0.1
variance: 0.2
variance: 0.2
step: 300
offset: 0.5

最小的框是264pixel,同理最小物体的尺寸是186.67pixel,conv9_2_mbox_priorbox包含语义信息较多,但可以检测的最小物体过大,也造成了conv9_2_mbox_priorbox无法用于检测小目标。

针对既要较大的featuremap,又要较为丰富的语义信息的问题,FPN、retinanet、yolov3等采用的方法比较一致,使用较小的featuremap通过upsample操作与较大的featuremap concat在一起,即保留了深层featuremap的语义信息,又利用了浅层featuremap较为精细的特征。yolov2同样使用了多尺度特征融合。

除了多尺度特征融合之外,还可以采用的另一个思路是detnet。使用专门的目标检测主干网络,代替当前针对分类任务的主干网络。针对分类任务的主干网络有以下问题:当前主干网络基于较大的降采样因子产生较大的感受野,较大的感受野对分类任务有利。(Traditional backbone produces higher receptive field based on large downsampling factor, which is beneficial to the visual classification)然而以上做法造成了空间分辨率的让步,这造成了大目标的定位不准确与小目标的识别困难(However, the spatial resolution is compromised which will fail to accurately localize the large objects and recognize the small objects.)

其核心思想是空洞瓶颈结构(dilated bottleneck structure),总结起来就是一句话:DetNet不仅保持较高分辨率的特征图,同时具有较大的感受野。(DetNet not only maintains high resolution feature maps but also keeps large receptive field)

论文中认为FPN在较深的层次生成并预测较大的物体,上述物体的边界可能会过于模糊以致于不能准确的回归。(large object is generated and predicted within deeper layers, the boundary of these object may be too blurry to get an accurate regression)。较大的步长的另一个缺点是小物体的丢失。(Another drawback of large stride is the missing of small objects.)

PS:FPN使用P2-P6层,retinanet使用P3-P7层。在retinanet中anchor与gt的IOU大于0.5为正样本,小于0.4为背景,大于0.4小于0.5的在训练过程中忽略。FPN仍然使用与faster-rcnn相同的原则,与某个gt有最高的IOU,或者与任何gt的IOU大于0.7,则认为是正样本,与任何gt IOU都小于0.3,则认为是负样本。

最后回到核心内容上来,detnet的实现就是将resnet中原来的3*3卷积换成3*3,dilate为2的空洞卷积,网络结构见下图:

参考:

https://www.zhihu.com/question/49455386

https://github.com/eric612/MobileNet-SSD-windows/blob/master/models/VGGNet/VOC0712/SSD_300x300/train.prototxt

以上是关于对于ssd对小目标检测效果的思考的主要内容,如果未能解决你的问题,请参考以下文章

基于改进SSD的车辆小目标检测方法

one-shot 检测算法YOLOSSD

详细解读目标检测经典算法-SSD

检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

Single Shot Multibox Detection (SSD)实战(上)

R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
小小的dream
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有